/* Abstract class that provides some basic properties
 * and functions to an object
 */

#pragma once

#include <ogrevector3.h>
#include "IGameManager.h"

enum ObjectType { OBSTACLE, WALL, PLAYER, AUTONOMOUS };

class IObject: public IGameManager
{
public:
	virtual void Draw()=0;
	virtual bool HandleMessage(int message)=0;
	virtual Ogre::Vector3 GetPosition()=0;
	virtual void SetPostion(Ogre::Vector3 pos)=0;
	virtual double GetBRadius()=0;
	virtual void SetBRadius(double r)=0;
	virtual int GetID()=0;
	virtual void SetID(int id)=0;
	virtual bool IsTagged()=0;
	virtual void Tag()=0;
	virtual void UnTag()=0;
	virtual Ogre::Vector3 GetScale()=0;
	virtual void SetScale(Ogre::Vector3 nScale)=0;
	virtual void SetScale(double nScale)=0;
	virtual ObjectType GetObjectType()=0;
	virtual void SetObjectType(ObjectType nType)=0;
	virtual void Write(std::ostream& os)=0;
	virtual void Read(std::istream& is)=0;
	virtual double TimeElapsed()=0;
	virtual void SetName(Ogre::String nName)=0;
	virtual Ogre::String GetName()=0;
};